/*
 * 人人信用管理有限公司版权所有.
 * 
 * @Description:
 * 
 * @author: liyuliang
 * 
 * @date: 20 Apr 2017 10:44:16 am
 * 
 * 注意：本内容仅限于人人信用管理有限公司内部传阅，禁止外泄以及用于其他的商业目的.
 */

package com.rrx360.common.util;

import java.lang.reflect.Method;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.rrx360.common.exception.RException;

public class EnumUtil {

  private static Map<String, Enum[]> enumMap = new ConcurrentHashMap<>();

  public static Enum getEnum(String enumName, int index) {
    String key = enumName;
    Enum[] enums = enumMap.get(key);
    if (enums == null) {
      try {
        Class clazz = Class.forName(enumName);
        Method method = clazz.getMethod("values");
        enums = (Enum[]) method.invoke(null, null);
        enumMap.put(enumName, enums);
      } catch (Exception e) {
        throw new RException(e);
      }
    }
    return enums[index];
  }

  public static Enum getEnum(String enumName, String value) {
    String key = enumName;
    Enum[] enums = enumMap.get(key);
    if (enums == null) {
      try {
        Class clazz = Class.forName(enumName);
        Method method = clazz.getMethod("values");
        enums = (Enum[]) method.invoke(null, null);
        enumMap.put(enumName, enums);
      } catch (Exception e) {
        throw new RException(e);
      }
    }
    return Enum.valueOf(enums[0].getClass(), value);
  }

  public static Integer ordinal(Enum en) {
    if (en == null) {
      return null;
    }
    return en.ordinal();
  }

}

